﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Comissoes.Utilities;

namespace Comissoes.Models
{
    public class LojasModel
    {
        xcontEntities db = new xcontEntities();

        public LOJAS loja { get; set; }
        private PessoasModel pessoa { get; set; }

        List<string> erros;

        public LojasModel(Int32? id)
        {
            if (id.HasValue && db.LOJAS.Any(t => t.COD_LOJA == id))
            {
                this.loja = db.LOJAS.Include("PESSOAS").Include("REGIMES_TRIBUTARIOS").First(t => t.COD_LOJA == id);
                pessoa = new PessoasModel(this.loja.PESSOAS);
            }
            else
            {
                LOJAS loja = new LOJAS();
                loja.PESSOAS = new PESSOAS();
                pessoa = new PessoasModel();

                this.loja = loja;
                this.loja.REGIMES_TRIBUTARIOS = new REGIMES_TRIBUTARIOS();
            }
        }

        public List<string> UpdateValidate(FormCollection form)
        {
            erros = new List<string>();

            if (string.IsNullOrEmpty(form["COD_LOJA"]))
                erros.Add("É necessário informar o código da loja.");

            if (string.IsNullOrEmpty(form["NOME_LOJA"]))
                erros.Add("É necessário informar o nome fantasia da loja.");

            if (string.IsNullOrEmpty(form["ID_RGTR"]))
                erros.Add("É necessário informar o regime tributário da loja.");

            erros.Union(pessoa.UpdateValidate(form));

            return erros;
        }

        public List<string> Update(FormCollection form)
        {
            erros = new List<string>();
            Int32 ID_RGTR = Int32.Parse(form["ID_RGTR"]);
            Int32 COD_LOJA = Int32.Parse(form["COD_LOJA"]);

            try
            {
                this.pessoa.Update(db, form);

                if (db.LOJAS.Any(t => t.COD_LOJA == this.loja.COD_LOJA))
                {
                    this.loja = db.LOJAS.FirstOrDefault(t => t.COD_LOJA == this.loja.COD_LOJA);
                }
                else
                {
                    this.loja.COD_LOJA = COD_LOJA;
                    db.AddToLOJAS(this.loja);
                }

                this.loja.PESSOAS = this.pessoa.pessoa;
                this.loja.ATIVO_LOJA = form["ATIVO_LOJA"].Contains("true") ? "A" : "B";
                this.loja.NOME_LOJA = form["NOME_LOJA"];
                this.loja.REGIMES_TRIBUTARIOS = db.REGIMES_TRIBUTARIOS.FirstOrDefault(t => t.ID_RGTR == ID_RGTR);

                db.SaveChanges();
            }
            catch (Exception ex)
            {
                erros.Add(ex.Message);
                if (ex.InnerException != null)
                    erros.Add(ex.InnerException.Message);
            }

            return erros;
        }
    }
}
